Many high performance systems require a memory that operates with a fast system clock. Some designers use synchronous random access memories ("RAMs") to meet this system requirement. For example, some synchronous static RAMs (SRAMs) are available which use registers or latches to temporarily store the address and control. These SRAMs use a "pipeline" scheme whereby the address to be accessed is provided during one cycle and, during the next sequential cycle, the data is provided on the data bus. For example, during a read operation, the address from which data is to be read is provided on the nth cycle and the data read from the SRAM is provided on the data bus on the (n+1)th cycle. For write operations, there are SRAMs that provide the address, control and data during the same cycle and there are designs where address and control are provided on the nth cycle and data is provided on the (n+1)th cycle.
The speed of the SRAM is increased because the set-up and hold time for a register or latch is typically much shorter than the time to access the main array of the SRAM (the difference typically being several nanoseconds). The result is to break the operations into shorter cycles. On the (n+1)th cycle, the register or latch provides the stored address to the SRAMs main array along with the data to be written to the stored address, meeting the set-up and hold times for writing to the SRAM's main array. Because of the reduced set-up and hold time for the address and data on the (n+1)th cycle, the SRAM's cycle time, as viewed at the pins of the device, can be significantly reduced. As a result, the frequency of the system clock can be increased.
One problem with conventional SRAMs is that, typically, trying to intermix reads and writes in a high speed system causes a cycle to be "lost" when a memory write is immediately followed by a memory read (i.e., bus turnaround). Generally, a cycle is lost on turnaround because the structure of these RAMs requires an extra cycle to make sure that all of the data is written into the memory before a read operation can be performed. For example, if a write operation is followed by a read operation from the same address, a lost cycle is needed so that the "new" data will be written to the specified address before the read operation is performed on the data stored at the same address. In systems where bus turnaround occurs frequently, the lost cycles on bus turnaround can significantly reduce the bandwidth of the system. With conventional synchronous SRAMs, the same problem can exist.